// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__65B7FA25_8FA7_4DBB_90C2_B0981AD6A831__INCLUDED_)
#define AFX_STDAFX_H__65B7FA25_8FA7_4DBB_90C2_B0981AD6A831__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers

#include <stdio.h>

// TODO: reference additional headers your program requires here
#include <afxwin.h>
#include <afxtempl.h>
#include <afxmt.h>
#include <MMSystem.h>
#include <process.h>
#include <time.h>
#include <conio.h>
#include "Markup.h"
#include "Params.h"

typedef struct
{
    WSAOVERLAPPED overlap;      
    WSABUF buffer;        
    CHAR szMessage[MSGSIZE];
    DWORD dwNumberOfBytesRecvd;
    DWORD dwFlags;
    SOCKADDR_IN  socketAdddr;
    INT nSocketAddrLen;

}PER_IO_OPERATION_DATA, *LPPER_IO_OPERATION_DATA;

HANDLE CreateNewCompletionPort(DWORD dwNumberOfThreads);
BOOL AssociateDeviceWithCompletionPort(HANDLE hCompletionPort, 
                                       HANDLE hDevice, ULONG_PTR pCompletionKey);

template<> UINT AFXAPI HashKey<SOCKADDR_IN&> (SOCKADDR_IN& addr);
template<> BOOL AFXAPI CompareElements<SOCKADDR_IN, SOCKADDR_IN> (const SOCKADDR_IN* pElement1, const SOCKADDR_IN* pElement2);

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__65B7FA25_8FA7_4DBB_90C2_B0981AD6A831__INCLUDED_)
